#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>


void Swap(char *s, int i, int j)
{
    char temp = s[i];
    s[i] = s[j];
    s[j] = temp;
}
void generateKey(char *key)
{
    for (int i = 0; i < 26; i++)
    {
        key[i] = 'a' + i;
    }
    // 随机打乱密钥
    srand(time(NULL));// 随机数种子
    for (int i = 25; i > 0; i--)
    {
        int j = rand() % i;
        Swap(key, i, j);
    }
    printf("密钥: %s\n", key);
    return;
}

// 加密
void Encrypt(char *Msg, char *key)
{
    int len = strlen(Msg);
    for (int i = 0; i < len; i++)
    {
        if (Msg[i] >= 'a' && Msg[i] <= 'z')
        {
            Msg[i] = key[Msg[i] - 'a'];
        }
        else if (Msg[i] >= 'A' && Msg[i] <= 'Z')
        {
            Msg[i] = key[Msg[i] - 'A'];
        }
    }
}

// 解密
void Decrypt(char *Msg, char *key)
{
    int len = strlen(Msg);
    for (int i = 0; i < len; i++)
    {
        if (Msg[i] >= 'a' && Msg[i] <= 'z')
        {
            int index = 0;
            for (int j = 0; j < 26; j++)
            {
                if (key[j] == Msg[i])
                {
                    Msg[i] = 'a' + j;
                    break;
                }
            }
        }
        else if (Msg[i] >= 'A' && Msg[i] <= 'Z')
        {
            int index = 0;
            for (int j = 0; j < 26; j++)
            {
                if (key[j] == Msg[i])
                {
                    Msg[i] = 'A' + j;
                    break;
                }
            } 
        }
    }
}

int main()
{
    char key[26] = { 0 };
    generateKey(key);


    char msg[1024] = { 0 };
    
    FILE *f = fopen("./1.txt", "r");
    int pos = 0;
    while(feof(f) == 0)
    {
        int size = 0;
        fread(msg + pos, 1024, 1, f);
        pos += size;
    }
    fclose(f);
    

    Encrypt(msg, key);
    printf("加密后：%s\n", msg);

    Decrypt(msg, key);
    printf("解密后：%s\n", msg);

    return 0;
}